package com.itbaizhan.service;

import com.itbaizhan.common.BaseResponse;
import io.seata.rm.tcc.api.BusinessActionContext;
import io.seata.rm.tcc.api.BusinessActionContextParameter;
import io.seata.rm.tcc.api.LocalTCC;
import io.seata.rm.tcc.api.TwoPhaseBusinessAction;

@LocalTCC
public interface ITStockTCCService {


    /**
     * 尝试阶段
     * @param commodityCode 商品编码
     * @param count         库存数量
     * @return
     */
    @TwoPhaseBusinessAction(
            // try 方法名字
            name = "deduct",
            // 确认方法
            commitMethod = "confirm",
            // 取消方法
            rollbackMethod = "cancel")
    BaseResponse deduct(
           @BusinessActionContextParameter(paramName = "commodityCode") String commodityCode,
           @BusinessActionContextParameter(paramName = "count") Integer count);


    /**
     * 确认阶段：
     * @param ctx 上下文,可以传递try方法的参数
     * @return
     */
    boolean confirm(BusinessActionContext ctx);


    /**
     * 取消阶段
     * @param ctx 上下文,可以传递try方法的参数
     * @return
     */
    boolean cancel(BusinessActionContext ctx);






}
